package org.lanqiao.tjut.shuzu;

import java.util.Arrays;

import javax.swing.plaf.synth.SynthSeparatorUI;

public class ShuZu {

	public static void main(String[] args) {
		//
		// test01();
		// arrInitAndIterate();
		// test02();
		// sortArr();
		test03();
	}

	/*
	 * 数组：一组类型相同的数据集合在一块连续存储进行存储的数据结构 数组默认初始值： int：0 byte：0 short:0 long：0L
	 * float：0.0f double：0.0 boolean：false char:‘\u0000’ object:null
	 * 数组是引用类型，数组作为参数传递的时候，传递的是地址。
	 */
	private static void test01() {
		// 数组的声明和初始化
		int[] arr0 = new int[3];
		// 或者
		int[] arr1;
		arr1 = new int[3];
		// 或者
		int[] arr3;
		arr3 = new int[] { 1, 2, 3 };
		// 直接使用{}集合初始化的方式，只能在声明定义中使用
		int[] arr2 = { 1, 2, 3 };
	}

	private static void arrInitAndIterate() {
		int[] arr0 = new int[] { 1, 2, 4 };
		// 遍历数组
		System.out.println("使用数组下标直接遍历数组元素：");
		System.out.println("arr0第1个元素的值：" + arr0[0]);
		System.out.println("arr0第2个元素的值：" + arr0[1]);
		System.out.println("arr0第3个元素的值：" + arr0[2]);
		System.out.println("使用数组下标直接遍历数组元素：");
		for (int i = 0; i < arr0.length; i++) {
			System.out.println("arro第" + (i + 1) + "个元素为：" + arr0[i]);
		}
		System.out.println("使用数组下标直接遍历数组元素：");
		/*
		 * ii--临时变量，通过循环一次使用临时变量ii 从指定的遍历集合对象中取出的元素。 arr0--被遍历的集合对象
		 * ：表示临时变量和被遍历集合之间的所属关系。临时变量的类型通数组的类型相同。 数组的内存空间一旦确定，不能扩充。
		 */
		for (int ii : arr0) {
			System.out.println("arr0元素：" + ii);
		}
	}

	/**
	 * 数组引用类型 引用类型作为参数永远是地址引用； 基本类型、string类型作为参数传递的是值。
	 */

	private static void test02() {
		int[] arr0 = { 1, 2, 3 };
		int[] arr1 = arr0;
		arr1[0] = 10;
		System.out.println("arr0[0]=" + arr0[0]);

	}

	/**
	 * 使用arrays工具类对数组进行排序
	 */
	private static void sortArr() {
		int[] arr0 = { 4, 3, 7, 9, 2, 1 };
		System.out.println("数组排序前：");
		printArr(arr0);
		// 调用arrays工具类的sort方法对数组进行排序；
		Arrays.sort(arr0);
		System.out.println("数组排序后：");
		printArr(arr0);
	}

	/**
	 * 打印数组元素内容
	 * 
	 * @param arr
	 */
	private static void printArr(int[] arr) {
		System.out.println("数组元素为：");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(" " + arr[i]);
		}
		System.out.println();
	}

	/**
	 * 数组扩充 创建一个新的数组；把老数组的数据复制到新数组中； 让老数组的地址指向新数组的地址
	 */
	private static void test03() {
		int[] a = { 1, 2, 3 };
		int[] b = new int[a.length * 2];
		for (int i = 0; i < a.length; i++) {
			a[i] = b[i];
		}
		a = b;
		// 或者
		int[] a1 = { 1, 2, 3 };
		int[] b1 = new int[a.length * 2];
		System.arraycopy(a, 0, b, 0, a.length);
		a = b;
	}
}
